package controller.gui;

import java.io.File;

import javax.swing.JButton;

import controller.Controller;

import mapelements.Renderer;

import tool.classloader.LocalObjectClassLoader;

import gui.SelectionBox;

/**rappresenta un pulsante di browse che, una volta selezionata una
 * cartella, la scandaglia e riporta in un componente i risultati della ricerca.
 * 
 * @author koldar
 * @version 1.3
 * @deprecated in quanto lo è anche ClassLoaderBrowseButtonController
 */
@Deprecated
public abstract class MapAdderBrowseController extends ClassLoaderBrowseButtonController{
	
	/**indica il pannello grafico su cui le informazioni che il controller reperisce dal classloader andranno scritte*/
	private SelectionBox outputConsole;

	/**costruisce un nuovo controller
	 * 
	 * @param _fatherClass indica la classe cui tutti i risultati del pulsante browse dovranno estendere
	 * @param loader indica l'oggetto che carica i dati dal file system
	 * @param addlistnener se TRUE il controller ascolterà lo stato azione dell'utente (cioé il <tt>userMode</tt>)
	 * @param outputConsole indica il pannello su cui i risultati della ricerca del classLaoder verranno visualizzati
	 */
	public MapAdderBrowseController(Class<?> _fatherClass,boolean addlistener,SelectionBox outputConsole) {
		super(_fatherClass,addlistener);
		this.outputConsole=outputConsole;
	}
	/**costruisce un nuovo controller senza settare l'{@link #outputConsole}; inoltre questo cotruttore farà in modo
	 * da cablare il presente controller con lo <tt>userMode</tt>
	 * 
	 * @param _fatherClass indica la classe cui tutti i risultati del browse dovranno estendere
	 * @param loader indica l'oggetto che carica i dati dal file system
	 */
	public MapAdderBrowseController(Class<?> _fatherClass){
		this(_fatherClass,true,null);
	}
	
	/**cabla il seguente controller sia con un determinato pulsante (la sua interfaccia di input) che con
	 * un pannello dove scrivere i risultati (output)
	 * 
	 * @param button
	 * @param output
	 */
	public void wire(JButton button,SelectionBox output){
		this.wire(button);
		this.outputConsole=output;
	}

	/**oltre a scandagliare la directory scelta, aggiorna la {@link #outputConsole}
	 * cablata con questo controller
	 * 
	 */
	@Override
	public void okInstructionList(File fileselected) {
		super.okInstructionList(fileselected);
		this.outputConsole.removeAllEntries();
		Object instance=null;
		for (String s: this.classloader.getClassfiles().keySet()){
			try{
				instance=this.classloader.loadNameClass(s).newInstance();
				if (instance instanceof Renderer){
					//this.outputConsole.addEntry(s,instance));
				}else{//si tratta di un concept
					this.outputConsole.addEntry(s, null);
				}
			} catch (InstantiationException | IllegalAccessException| ClassNotFoundException e) {
			}
		}
	}
	
	

}
